﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using GiaoXuLanTranh_MucVu.Models;
using InfoTech.Core.Data.SqlClient;
using InfoTech.Data.Linq;
using InfoTech.LanTranh.MucVu.Bussiness;
using InfoTech.LanTranh.MucVu.Service;
using InfoTech.Mvc.JqGrid;
using InfoTech.Mvc.LanTranh.MucVu.Models;

namespace GiaoXuLanTranh_MucVu.Areas.AdminCP.Controllers
{
    [Authorize]
    public class QuanLyHanhChinhController : Controller
    {

        #region Quoc Gia

        public ActionResult QuocGia()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuocGia_Index";
            header.CurentCommon = "Country";
            header.PageTitle = "Danh mục quốc gia - Quản lý hành chính";
            header.PageHeader = "Danh mục quốc gia - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0401";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_Country()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<QUOCGIA> query = dataContext.GetTable<QUOCGIA>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<QUOCGIA>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<QUOCGIA>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<QUOCGIA>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<QUOCGIA>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<QUOCGIA>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new QUOCGIAModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddCountry()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Country";
            header.PageTitle = "Thêm quốc gia - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0401";
            ViewData[Header.Key] = header;
            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddCountry(QUOCGIAModel quocgiaModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Country";
            header.PageTitle = "Thêm quốc gia - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0401";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUOCGIA quocgia = quocgiaModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (QUOCGIAService.Check_Insert_QUOCGIA(quocgia))
                {
                    Exception exception;
                    quocgia.Insert(out exception);

                    if (exception == null)
                    {
                        ModelState["TENQUOCGIA"].Value = new ValueProviderResult(null, string.Empty,
                                                                                 CultureInfo.InvariantCulture);
                        ModelState["VIETTAT"].Value = new ValueProviderResult(null, string.Empty,
                                                                              CultureInfo.InvariantCulture);
                        ModelState["MABUUCHINH"].Value = new ValueProviderResult(null, string.Empty,
                                                                                 CultureInfo.InvariantCulture);

                        quocgiaModel.TENQUOCGIA = "";
                        quocgiaModel.VIETTAT = "";
                        quocgiaModel.MABUUCHINH = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quocgiaModel);
        }

        public ActionResult EditCountry(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                QUOCGIA quocgia = new QUOCGIA();
                quocgia.MAQUOCGIA = guid;
                quocgia.SelectbyId();
                if (quocgia.IsPersistence)
                {
                    // Header
                    Header header = new Header();
                    header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
                    header.CurentCommon = "Country";
                    header.PageTitle = "Cập nhật quốc gia - Quản lý hành chính";
                    header.PageHeader = "Quản lý hành chính";
                    header.Menulv1 = "04";
                    header.Menulv2 = "0401";
                    ViewData[Header.Key] = header;
                    return View(new QUOCGIAModel(quocgia));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("QuocGia");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditCountry(QUOCGIAModel quocgiaModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Country";
            header.PageTitle = "Cập nhật quốc gia - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0401";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUOCGIA quocgia = quocgiaModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (QUOCGIAService.Check_Update_QUOCGIA(quocgia))
                {
                    Exception exception;
                    quocgia.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //quocgiaModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quocgiaModel);
        }

        public ActionResult DeleteCountry(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                Guid guid;
                bool isError = false;
                if (QUOCGIAService.Check_Delete_QUOCGIA(s))
                {
                    isError = true;
                }
                else
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out guid))
                        {
                            var quocgia = new QUOCGIA();
                            quocgia.MAQUOCGIA = guid;
                            Exception exception;
                            quocgia.SelectbyId();
                            if (quocgia.IsPersistence)
                            {
                                quocgia.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Tinh Thanh

        public ActionResult TinhThanh()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_TinhThanh_Index";
            header.CurentCommon = "City";
            header.PageTitle = "Danh mục tỉnh thành - Quản lý hành chính";
            header.PageHeader = "Danh mục tỉnh thành - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0402";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_City()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);

            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<TINHTHANH> query = dataContext.GetTable<TINHTHANH>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<TINHTHANH>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<TINHTHANH>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<TINHTHANH>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<TINHTHANH>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<TINHTHANH>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Join(dataContext.GetTable<QUOCGIA>(), c => c.MAQUOCGIA, v => v.MAQUOCGIA, (c, v) => new { c.MATINHTHANH, c.TENTINHTHANH, c.MABUUCHINH, v.TENQUOCGIA })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddCity()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "City";
            header.PageTitle = "Thêm tỉnh thành - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0402";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddCity(TINHTHANHModel tinhthanhModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "City";
            header.PageTitle = "Thêm tỉnh thành - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0402";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                TINHTHANH tinhthanh = tinhthanhModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (TINHTHANHService.Check_Insert_TINHTHANH(tinhthanh))
                {
                    Exception exception;
                    tinhthanh.Insert(out exception);
                    if (exception == null)
                    {
                        ModelState["TENTINHTHANH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        ModelState["MABUUCHINH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        tinhthanhModel.TENTINHTHANH = "";
                        tinhthanhModel.MABUUCHINH = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(tinhthanhModel);
        }

        public ActionResult EditCity(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                TINHTHANH tinhthanh = new TINHTHANH();
                tinhthanh.MATINHTHANH = guid;
                tinhthanh.SelectbyId();
                if (tinhthanh.IsPersistence)
                {
                    // Header
                    Header header = new Header();
                    header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
                    header.CurentCommon = "City";
                    header.PageTitle = "Thêm tỉnh thành - Quản lý hành chính";
                    header.PageHeader = "Quản lý hành chính";
                    header.Menulv1 = "04";
                    header.Menulv2 = "0402";
                    ViewData[Header.Key] = header;

                    return View(new TINHTHANHModel(tinhthanh));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("TinhThanh");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditCity(TINHTHANHModel tinhthanhModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "City";
            header.PageTitle = "Thêm tỉnh thành - Quản lý hành chính";
            header.PageHeader = "Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0402";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                TINHTHANH tinhthanh = tinhthanhModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (TINHTHANHService.Check_Update_TINHTHANH(tinhthanh))
                {
                    Exception exception;
                    tinhthanh.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //tinhthanhModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(tinhthanhModel);
        }

        public ActionResult DeleteCity(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (TINHTHANHService.Check_Delete_TINHTHANH(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var tinhthanh = new TINHTHANH();
                            tinhthanh.MATINHTHANH = guid;
                            Exception exception;
                            tinhthanh.SelectbyId();
                            if (tinhthanh.IsPersistence)
                            {
                                // Check service here
                                tinhthanh.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Quan Huyen

        public ActionResult QuanHuyen()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanHuyen_Index";
            header.CurentCommon = "District";
            header.PageTitle = "Danh mục quận huyện - Quản lý hành chính";
            header.PageHeader = "Danh mục quận huyện - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0403";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_District()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<QUANHUYEN> query = dataContext.GetTable<QUANHUYEN>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<QUANHUYEN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<QUANHUYEN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<QUANHUYEN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<QUANHUYEN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<QUANHUYEN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Join(dataContext.GetTable<TINHTHANH>(), c => c.MATINHTHANH, c => c.MATINHTHANH, (c, v) => new { c.MAQUANHUYEN, c.TENQUANHUYEN, v.MATINHTHANH, v.TENTINHTHANH, v.MAQUOCGIA })
                .Join(dataContext.GetTable<QUOCGIA>(), c => c.MAQUOCGIA, v => v.MAQUOCGIA, (c, v) => new { c.MAQUANHUYEN, c.TENQUANHUYEN, c.TENTINHTHANH, v.TENQUOCGIA })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddDistrict()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "District";
            header.PageTitle = "Thêm quận huyện - Quản lý hành chính";
            header.PageHeader = "Thêm quận huyện - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0403";
            ViewData[Header.Key] = header;
            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddDistrict(QUANHUYENModel quanhuyenModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "District";
            header.PageTitle = "Thêm quận huyện - Quản lý hành chính";
            header.PageHeader = "Thêm quận huyện - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0403";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUANHUYEN quanhuyen = quanhuyenModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (QUANHUYENService.Check_Insert_QUANHUYEN(quanhuyen))
                {
                    Exception exception;
                    quanhuyen.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //quanhuyenModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quanhuyenModel);
        }

        public ActionResult EditDistrict(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                QUANHUYEN quanhuyen = new QUANHUYEN();
                quanhuyen.MAQUANHUYEN = guid;
                quanhuyen.SelectbyId();
                if (quanhuyen.IsPersistence)
                {
                    // Header
                    Header header = new Header();
                    header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
                    header.CurentCommon = "District";
                    header.PageTitle = "Cập nhật quận huyện - Quản lý hành chính";
                    header.PageHeader = "Cập nhật huyện - Quản lý hành chính";
                    header.Menulv1 = "04";
                    header.Menulv2 = "0403";
                    ViewData[Header.Key] = header;

                    return View(new QUANHUYENModel(quanhuyen));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("QuanHuyen");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditDistrict(QUANHUYENModel quanhuyenModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "District";
            header.PageTitle = "Cập nhật quận huyện - Quản lý hành chính";
            header.PageHeader = "Cập nhật huyện - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0403";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                QUANHUYEN quanhuyen = quanhuyenModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (QUANHUYENService.Check_Update_QUANHUYEN(quanhuyen))
                {
                    Exception exception;
                    quanhuyen.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //quanhuyenModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(quanhuyenModel);
        }

        public ActionResult DeleteDistrict(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (QUANHUYENService.Check_Delete_QUANHUYEN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var quanhuyen = new QUANHUYEN();
                            quanhuyen.MAQUANHUYEN = guid;
                            Exception exception;
                            quanhuyen.SelectbyId();
                            if (quanhuyen.IsPersistence)
                            {
                                // Check service here
                                quanhuyen.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Xa Phuong

        public ActionResult XaPhuong()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_XaPhuong_Index";
            header.CurentCommon = "Ward";
            header.PageTitle = "Danh mục xã phường - Quản lý hành chính";
            header.PageHeader = "Danh mục xã phường - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0404";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_Ward()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<XAPHUONG> query = dataContext.GetTable<XAPHUONG>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<XAPHUONG>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<XAPHUONG>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<XAPHUONG>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<XAPHUONG>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<XAPHUONG>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Join(dataContext.GetTable<QUANHUYEN>(), c => c.MAQUANHUYEN, v => v.MAQUANHUYEN, (c, v) => new { c.MAXAPHUONG, c.TENXAPHUONG, v.MAQUANHUYEN, v.TENQUANHUYEN, v.MATINHTHANH })
                .Join(dataContext.GetTable<TINHTHANH>(), c => c.MATINHTHANH, c => c.MATINHTHANH, (c, v) => new { c.MAXAPHUONG, c.TENXAPHUONG, c.TENQUANHUYEN, v.MATINHTHANH, v.TENTINHTHANH, v.MAQUOCGIA })
                .Join(dataContext.GetTable<QUOCGIA>(), c => c.MAQUOCGIA, v => v.MAQUOCGIA, (c, v) => new { c.MAXAPHUONG, c.TENXAPHUONG, c.TENQUANHUYEN, c.TENTINHTHANH, v.TENQUOCGIA })
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddWard()
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Ward";
            header.PageTitle = "Cập nhật xã phường - Quản lý hành chính";
            header.PageHeader = "Cập nhật xã phường - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0404";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddWard(XAPHUONGModel xaphuongModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Ward";
            header.PageTitle = "Cập nhật xã phường - Quản lý hành chính";
            header.PageHeader = "Cập nhật xã phường - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0404";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                XAPHUONG xaphuong = xaphuongModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (XAPHUONGService.Check_Insert_XAPHUONG(xaphuong))
                {
                    Exception exception;
                    xaphuong.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //xaphuongModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(xaphuongModel);
        }

        public ActionResult EditWard(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                XAPHUONG xaphuong = new XAPHUONG();
                xaphuong.MAXAPHUONG = guid;
                xaphuong.SelectbyId();
                if (xaphuong.IsPersistence)
                {
                    // Header
                    Header header = new Header();
                    header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
                    header.CurentCommon = "Ward";
                    header.PageTitle = "Cập nhật xã phường - Quản lý hành chính";
                    header.PageHeader = "Cập nhật xã phường - Quản lý hành chính";
                    header.Menulv1 = "04";
                    header.Menulv2 = "0404";
                    ViewData[Header.Key] = header;

                    return View(new XAPHUONGModel(xaphuong));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("XAPHUONG");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditWard(XAPHUONGModel xaphuongModel)
        {
            // Header
            Header header = new Header();
            header.Common = "ViewUserControl_QuanLyHanhChinh_Index";
            header.CurentCommon = "Ward";
            header.PageTitle = "Cập nhật xã phường - Quản lý hành chính";
            header.PageHeader = "Cập nhật xã phường - Quản lý hành chính";
            header.Menulv1 = "04";
            header.Menulv2 = "0404";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                XAPHUONG xaphuong = xaphuongModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (XAPHUONGService.Check_Update_XAPHUONG(xaphuong))
                {
                    Exception exception;
                    xaphuong.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //xaphuongModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(xaphuongModel);
        }

        public ActionResult DeleteWard(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (XAPHUONGService.Check_Delete_XAPHUONG(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var xaphuong = new XAPHUONG();
                            xaphuong.MAXAPHUONG = guid;
                            Exception exception;
                            xaphuong.SelectbyId();
                            if (xaphuong.IsPersistence)
                            {
                                // Check service here
                                xaphuong.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

    }
}
